const net = require('net');

// socket 是一个可读可写的双工流
const server = net.createServer(socket => {
    console.log('客户端已经连接');
    console.log(socket.address()); // 客户端信息
    server.maxConnections = 2; // 设置可以连接客户端的总数量
    // socket.setEncoding('utf8');    // 设置编码格式
    server.getConnections((err,count) => {
        console.log(`现在连接的客户端总量${count},最多可以连接${server.maxConnections}个`)
    })
    // 获取可读流中的数据
    socket.on('data',data => {
        // data 默认buffer 可以通过%s 转换成字符串格式
        console.log('接收到客户端发过来的数据:%s',data);
        socket.write(data);
    });
    /**
     * 在这个地方并没有真正关闭
     * 只是开始关闭
     * 真正关闭时会触发一个close事件
     */
    socket.on('end', () => {
        console.log('客户端开始关闭');
        server.unref(); // 此方法执行后，当所有的客户端断开和此服务器的连接，则关闭服务器
    })
    /* setTimeout(() => {
        server.close();
        // 服务器执行close方法，不会关闭现有服务器，只是客户端将不再接收新的连接
    }, 10000); */ 
    // hasError 为true标识异常关闭，否则表示为正常关闭
    socket.on('close', hasError => {
        console.log('客户端真正关闭', hasError)
    })
})

server.listen(8080,() => { 
    console.log(server.address());

    console.log('服务器启动成功')
});

/*
* cmd 连接  -> telnet localhost 8080
* telnet 功能开启  
* > 1. 搜索window 功能 
* > 2. 勾选telnet客户端
* > 3. 退出 3.1 ctrl + ]  3.2 quit
*/